//
//  ViewController.swift
//  swift_learning
//
//  Created by arons on 2016/12/6.
//  Copyright © 2016年 arons. All rights reserved.
//

import UIKit

class ViewController: UIViewController {
    
    // 懒加载
    /// tableView
    lazy var tableView : UITableView = {
        let tmpTableView = UITableView();
        // 设置属性
        return tmpTableView;
    }();
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setUI();
        
    }
    
    /// 设置UI
    func setUI() {
        self.tableView.frame = self.view.bounds;
        self.view .addSubview(self.tableView);
        self.tableView.dataSource = self;
        self.tableView.delegate = self;
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("========")
        
        let httpTool = HttpTool()
        
        //        weak var weakSelf = self;
        
        // 方式一
        //        httpTool.loadData2 { (result) in
        //            print("result = \(result)");
        //            
        //            // weakSelf?.view
        //            // 如果weakSelf没有值，后面的代码不会执行，
        //            // 如果weakSelf有只，后面的代码会自动解包执行
        //            weakSelf?.view.backgroundColor = UIColor.green;
        //        }
        
        // 方式二，推荐的方式
        //        httpTool.loadData2 { [weak self] (result) in
        //            self?.view.backgroundColor = UIColor.green;
        //        }
        
        // 方式三
        // 相当于OC中的_unsafe_unretained 修饰符，如果指向的对象销毁，依然指向之前的内存地址，容易产生野指针，僵尸对象
        httpTool.loadData2 { [unowned self] (result) in
            self.view.backgroundColor = UIColor.green;
        }
        
        // 尾随闭包，如果方法的最后一个参数是block可以把小括号省略,以下三种方式都可以
        httpTool.loadData2(callBack: { (result) in
            
        });
        
        httpTool.loadData2() { (result) in
            
        }
        
        httpTool.loadData2 { (result) in
            
        }
        
    }
    
    deinit {
        print("====ViewController deinit====");
    }
    
}


// MARK: - ......::::::: 扩展，可以扩展方法 :::::::......
/// 遵守的协议使用 ViewController : UITableViewDataSource, UITableViewDelegate
extension ViewController : UITableViewDataSource, UITableViewDelegate {
    // MARK: - ......::::::: UITableViewDataSource :::::::......
    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10;
    }
    
    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        // 创建Cell
        var cell = tableView.dequeueReusableCell(withIdentifier: "cellId");
        if cell == nil {
            cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cellId");
        }
        
        // 可选链
        // 设置数据
        cell?.textLabel?.text = "aaa\(indexPath.row)";
        
        // 返回Cell
        return cell!;
    }
    
    // MARK: - ......::::::: UITableViewDelegate :::::::......
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true);
        BMLOG("didSelectRowAt=>\(indexPath.row)");
    }
}
